LoginSignup
t00nyy
@t00nyy

Are you sure you want to delete the question?

If your question is resolved, you may close it.

Leaving a resolved question undeleted may help others!

We hope you find it useful!

VScodeでC++20を使えるようになりたい

解決したいこと

最近VScode(Win11,Ver1.89.1)を使って競プロ(AtCoder)の勉強を始めました.そこでABC348のC問題の解説を読んだところ,c++20から追加された関数が使用されていました.
そこで自分のVScodeに打ち込んでプログラムを実行しようとしたところ,下の画像のようなエラーが出てしまいました.
image.png
自分なりに調べたところVScodeで使用しているC++のバージョンが,C++17であることが原因ではないかと考えました.
自分で調べて少し手を動かしてみたのですが解決できなかったので,何かアドバイスがある方は是非ご教授いただけると幸いです.
以下試してみたことを書きます.何かもっと情報が必要な場合は教えてください.

試してみたこと

まず以下のコードを実行し,VScodeで使用しているC++のバージョンを調べました.

#include <iostream>

int main()
{
    std::cout << __cplusplus << std::endl;
    return 0;
}

その結果次のような実行結果が得られました.

201703

このことから使用しているバージョンはC++17であるとわかりました.

次にこちらのページを参考にしてsettings.jsonの設定を変更しました.具体的には,"code-runner.executorMap"内の"cpp"の部分を

"cd $dir && g++ $fileName -std=c++20 -o $fileNameWithoutExt && $dir$fileNameWithoutExt",

のように書き換えました.参考にしたページではこれで解決していたのですが,私の環境では解決しませんでした.この時点でお手上げ状態になってしまったので何か気づいたことがあればご教授いただけると幸いです.

追記

1.
参考にしたページではsettigns.jsonの

"cd $dir && g++ $fileName -std=c++20 -o $fileNameWithoutExt && $dir$fileNameWithoutExt",

内の-std=c++20の部分が-std=c++2aになっている件について.

⇒参考にしたページの通りに変更しても状況は改善しませんでした.

一応解決?

いろいろいじっていたらうまくいくようになりました.ただし,自分でもよくわからないうちに解決したのでその疑問とともに記述しておきます.

1.そもそもCode Runnerを使えていなかった?

一つ目の解決策として,tasks.json内の"args"の設定を以下のように変更したら解決しました.

"args": [
                "-fdiagnostics-color=always",
                "-g",
                "${file}",
                "-o",
                "${fileDirname}\\${fileBasenameNoExtension}.exe"
            ],

2行目("-g",の前の行)に-std=c++20を追加.その状態でファイルを実行したところ

202002

という実行結果が得られ,C++20が使用できていることがわかりました.

なぜか解決したのか自分の考え

普段ファイルを実行する際に画像の再生ボタンを押して実行していました.
image.png
このボタンを単純に押した場合下の画像のプルダウンの中では一番下の「C/C++ファイルの実行」を選択していたのと同じ状態であったのかと思います.
image.png
その状態の場合コンパイルはCode Runnerを使用していなかったのではないかと思われ,そのためsettings.json内の設定を変更しても反映されていませんでした.

2.Run Codeを使用する

settings.jsonの設定を「試してみたこと」で記した内容に変更したのち,「Ctrl+Alt+N」を押してファイルを実行したところ,

202002

という実行結果がえられ,c++20が使用できていることが確認できました.

image.png
画像のプルダウンの真ん中のRun Codeをクリックすることによっても同じ結果が得られました.

0

1Answer

次にこちらのページを参考にしてsettings.jsonの設定を変更しました.

参考にされたページでは

-std=c++20

-std=c++2a

に変更して解決した。
とありますが、確認されましたか?

0

Comments

  1. @t00nyy

    Questioner

    回答ありがとうございます.
    そちらの件について書くのを忘れていました.質問本文のほうに追記しておきます.

  2. 環境に関する情報が少ないので的はずれかもしれませんが、VScode の settings.json には優先順位がありますので、こちらも確認されてはいかがでしょう。

  3. @t00nyy

    Questioner

    解決しました.質問のほうに追記させていただいたのでご確認いただけると幸いです.
    また,今回解決に手間取ってしまった原因はCode Runnerの使い方を理解できていなかったところかなと思います.
    複数回にわたり回答いただきましてありがとうございました.

  4. お疲れさまでした。
    今後も経験を重ね、ご健闘されることをお祈りいたします。

Your answer might help someone💌